package com.apps.java.javanote02;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class _20Date {
    /**
     * Date日期类
     * 	一、概述：Date代表了一个特定的时间，精确到毫秒
     *
     * 		1.构造方法
     * 			方法名				 		说明
     * 			public Date()			分配了一个Date对象，并初始化，以便它代表它被分配的时间，精准到毫秒
     * 			public Date(long date)	分配一个Date对象，并将其初始化为表示从标准基准时间起指定的毫秒数
     *
     * 		2.Date类常用方法：
     * 			public  long getTime()	获取的是日期对象从1970年1月1日00:00:00到现在的毫秒值
     * 			public void setTime()	设置时间，给的是毫秒值
     *
     * 	二、日期类
     *		1.SimpleDateFormat类概述
     *			是一个具体的类，用以区域设置敏感的方式格式和解析日期，重点：日期格式化和解析
     *			日期和时间格式由日期和时间模式字符串指定，在日期和时间模式字符串中，从'A'到'Z'以及'a'到'z'引号的字母被解释为表示日期或时间字符串的组件的模式字母。
     *				y --- 年
     *				M --- 月
     *				d --- 日
     *				H --- 时
     *				m --- 分
     *				s --- 秒
     *		2.构造方法
     *			方法名										说明
     *			public SimpleDateFormat()					创造一个SimpleDateFormat，使用默认模式和日期格式
     *			public SimpleDateFormat(String pattern)		构造一个SimpleDateFormat使用给定的模式和默认的日期格式
     *
     *		3.格式化和解析日期
     *			1.格式化(从Date到String)
     *				public final String format(Date date):将日期格式化成日期/时间字符串
     *			2.解析(从String到Date)
     *				public Date parse(String source):从给定字符串的开始解析文本以生成日期
     *
     * 	三、Calendar类
     * 		1.概述：Calendar为某一时刻和一组日历字段之间的转换提供了一些方法，并为操作日历字段提供了一些方法。
     * 			Calendar提供了一个类方法getInstance用于获取Calendar对象，其日历字段已使用当前日期和时间初始化：
     * 				Calendar rightNow = Calendar.getInstance();
     *
     * 		2.常用方法
     * 			方法名												说明
     * 			public int get(int field)							返回给定日历字段的值
     * 			public abstract void add(int field,int amount)		根据日历的规则，将指定的时间量添加或减去给定的日历字段
     * 			public final void set(int year,int mouth,int date)	设置当前日历的年月日
     *
     */

    public static void main(String[] args) {
//Date构造方法

        //1.public Date()：分配了一个Date对象，并初始化，以便它代表它被分配的时间，精准到毫秒
        Date d1 = new Date();
        System.out.println(d1);

        //2.public Date(long date):分配一个Date对象，并将其初始化为表示从标准基准时间起指定的毫秒数
        long a = 1000*60*60;
        Date d2 = new Date(a);
        System.out.println(d2);

//Date常用方法
        //1.public long getTime()	获取的是日期对象从1970年1月1日00:00:00到现在的毫秒值
        System.out.println(d1.getTime()*1.0/1000/60/60/24/365+"年");

        //2.public void setTime()	设置时间，给的是毫秒值
        //long time = 1000*60*60;
        long time = System.currentTimeMillis();//系统获取的当前时间
        d1.setTime(time);
        System.out.println(d1);

        System.out.println("------------------");

//SimpleDateFormat构造方法
        //1.public SimpleDateFormat():创造一个SimpleDateFormat，使用默认模式和日期格式
        //格式化：从Date到String
        Date d3 = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat();
        String f = sdf.format(d3);
        System.out.println(f);



        //2.public SimpleDateFormat(String pattern):构造一个SimpleDateFormat使用给定的模式和默认的日期格式
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        String f2 = sdf2.format(d3);
        System.out.println(f2);


        //从String到Date
        try {
            String str = "2021年08月09日 12:11:12";//这里的格式必须和simp对象里的格式一致
            Date s4 = sdf2.parse(str);
            System.out.println(s4);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        System.out.println("-------------------");

//Calendar类方法使用
        Calendar c = Calendar.getInstance();//多态的形式
        //System.out.println(c);

        //public final void set(int year,int mouth,int date)	设置当前日历的年月日
        c.set(2003, 2, 1);

        //public int get(int field)	返回给定日历字段的值。
        int year = c.get(Calendar.YEAR);//根据Calendar.字段获取当前系统时间的年
        int month = c.get(Calendar.MONTH) + 1;//月份从零开始，所以后面要+1
        int date = c.get(Calendar.DATE);//获得日
        System.out.println(year + "年" + month + "月" + date + "日");

        System.out.println("----------------");

        //public abstract void add(int field,int amount)根据日历的规则，将指定的时间量添加或减去给定的日历字段
        c.add(Calendar.DATE, -5);

        int year2 = c.get(Calendar.YEAR);//根据Calendar.字段获取当前系统时间的年
        int month2 = c.get(Calendar.MONTH) + 1;//月份从零开始，所以后面要+1
        int date2 = c.get(Calendar.DATE);//获得日
        System.out.println(year2 + "年" + month2 + "月" + date2 + "日");


    }
}
